﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Portal.Xml.Utility;

namespace Portal.Cms.Model
{
    public class DataTypeCls
    {
        public string DataTypeId;
        public string DataTypeName;
        public int AllowSub = 0;
        public int AllowDocumentType = 0;
        public int AllowDocumentSinger = 0;
        public int AllowDocumentReleaseFrom = 0;
        public string PlugInModuleId;
    }

    public class DataTypeParser
    {
        public static DataTypeCls CreateInstance()
        {
            //tao 1 class trang....
            DataTypeCls oDataTypeCls = new DataTypeCls();
            return oDataTypeCls;
        }

        public static DataTypeCls ParseFromXml(string XmlData)
        {
            DataSet ds = XmlUtility.GetDataSetFromXml(XmlData);
            DataTypeCls oDataTypeCls = ParseFromDataRow(ds.Tables[0].Rows[0]);
            return oDataTypeCls;
        }


        public static DataTypeCls ParseFromDataRow(DataRow dr)
        {
            DataTypeCls oDataTypeCls = new DataTypeCls();
            oDataTypeCls.DataTypeId = XmlUtility.GetString(dr, "DataTypeId", true);
            oDataTypeCls.DataTypeName = XmlUtility.GetString(dr, "DataTypeName", true);
            oDataTypeCls.AllowSub = XmlUtility.GetInt(dr, "AllowSub", true);
            oDataTypeCls.AllowDocumentType = XmlUtility.GetInt(dr, "AllowDocumentType", true);
            oDataTypeCls.AllowDocumentSinger = XmlUtility.GetInt(dr, "AllowDocumentSinger", true);
            oDataTypeCls.AllowDocumentReleaseFrom = XmlUtility.GetInt(dr, "AllowDocumentReleaseFrom", true);
            oDataTypeCls.PlugInModuleId = XmlUtility.GetString(dr, "PlugInModuleId", true);
            return oDataTypeCls;
        }

        public static DataTypeCls[] ParseFromDataTable(DataTable dtTable)
        {
            DataTypeCls[] DataTypes = new DataTypeCls[dtTable.Rows.Count];
            for (int iIndex = 0; iIndex < dtTable.Rows.Count; iIndex++)
            {
                DataTypes[iIndex] = ParseFromDataRow(dtTable.Rows[iIndex]);
            }

            return DataTypes;
        }

        public static DataSet CreateDataset()
        {
            DataSet ds = new DataSet();
            ds.Tables.Add("Info");

            ds.Tables["Info"].Columns.Add("DataTypeId");
            ds.Tables["Info"].Columns.Add("DataTypeName");
            ds.Tables["Info"].Columns.Add("AllowSub");
            ds.Tables["Info"].Columns.Add("AllowDocumentType");
            ds.Tables["Info"].Columns.Add("AllowDocumentSinger");
            ds.Tables["Info"].Columns.Add("AllowDocumentReleaseFrom");
            ds.Tables["Info"].Columns.Add("PlugInModuleId");
            return ds;
        }

        public static string GetXml(DataTypeCls oDataTypeCls)
        {
            DataSet ds = CreateDataset();
            ds.Tables["Info"].Rows.Add(new object[]{
                oDataTypeCls.DataTypeId,
                oDataTypeCls.DataTypeName,
                oDataTypeCls.AllowSub,
                oDataTypeCls.AllowDocumentType,
                oDataTypeCls.AllowDocumentSinger,
                oDataTypeCls.AllowDocumentReleaseFrom,
                oDataTypeCls.PlugInModuleId
            });
            return ds.GetXml();
        }

        public static string GetXml(DataRow dr)
        {
            DataTypeCls oDataType = DataTypeParser.ParseFromDataRow(dr);
            string Xml = DataTypeParser.GetXml(oDataType);
            return Xml;
        }

        public static string GetXml(DataTable dt)
        {
            if (dt == null) return null;
            DataTypeCls[] DataTypes = new DataTypeCls[dt.Rows.Count];
            for (int iIndex = 0; iIndex < dt.Rows.Count; iIndex++)
            {
                DataTypes[iIndex] = DataTypeParser.ParseFromDataRow(dt.Rows[iIndex]);
            }
            string Xml = DataTypeParser.GetXml(DataTypes);
            return Xml;
        }


        public static string GetXml(DataTypeCls[] DataTypes)
        {
            if (DataTypes == null)
            {
                //neu null thi khoi tao = mang rong de cho do loi...!
                DataTypes = new DataTypeCls[0];
            }
            DataSet ds = CreateDataset();
            for (int iIndex = 0; iIndex < DataTypes.Length; iIndex++)
            {
                DataTypeCls oDataTypeCls = DataTypes[iIndex];
                ds.Tables["Info"].Rows.Add(new object[]
                {
                    oDataTypeCls.DataTypeId,
                    oDataTypeCls.DataTypeName,
                    oDataTypeCls.AllowSub,
                    oDataTypeCls.AllowDocumentType,
                    oDataTypeCls.AllowDocumentSinger,
                    oDataTypeCls.AllowDocumentReleaseFrom,
                    oDataTypeCls.PlugInModuleId
                });
            }
            string XmlData = ds.GetXml();
            return XmlData;
        }

        public static DataTypeCls[] ParseMultiRecordFromXml(string XmlData)
        {
            DataSet ds = XmlUtility.GetDataSetFromXml(XmlData);
            if (ds.Tables.Count == 0)
            {
                return new DataTypeCls[0];
            }
            DataTypeCls[] DataTypes = new DataTypeCls[ds.Tables[0].Rows.Count];
            for (int iIndex = 0; iIndex < ds.Tables[0].Rows.Count; iIndex++)
            {
                DataTypes[iIndex] = ParseFromDataRow(ds.Tables[0].Rows[iIndex]);
            }
            return DataTypes;
        }
    }
}
